iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
Software Development

深入一點點認識 Git系列 第 1

Day 1-深入一點點認識 Git:關於此系列文的內容及難度定位

  • 分享至 

  • xImage
  •  

研究所畢業後第一件事情不是打開求職網站投履歷,而是回頭去讀那些一直知道很重要、之前卻因為要趕論文而無暇複習或學習的觀念。

而首個要深入探究的內容,是學校不教、但出去工作後一定要會,而且幾乎每個領域都會用到的 git。雖說之前在 AppWorks School 已經有被要求用 git 做版本控制,但當時對於 git 是怎麼運作的還是一知半解,整天亂 commit 也不知道自己在做什麼,真的要團隊協作或為挽救錯誤而退回先前版本,幾乎都在亂弄,等於是有好工具在手,卻無法將其效益最大化,十分可惜。

這次藉由參加鐵人賽,希望能藉此把握這一個月的時間,好好回頭讀 git,並在沒有專案的壓力下,好好透過實驗觀察每道指令帶來的變化,希望能對 git 內部的運作有更深入的了解,未來要使用這套工具時,才不會像之前在那邊胡搞瞎搞。

這系列不是 Git 入門文章

對於第一次接觸 git 的人來說,這系列文章或許不適合你,雖然最前面還是會很快帶過入門觀念,但主要是用來快速複習,而非詳細講解,有點類似大學課程會先快速講過高中課程內容,才開始進入真正的課程主題。

如果想要入門 git,網路上有非常豐富的免費資源,例如:

  1. 為你自己學 Git(高見龍)
  2. 適合初學者的簡單 Git 教程(Nulab)
  3. Git & GitHub 教學手冊(六角學院)

上述文章從安裝到常用指令都有詳細介紹,如果連安裝及基礎指令都還不會,建議從這幾篇文章開始看。

當然,如果想要直接跟著本系列文章學也不是不行,但就會像跳過高中、直接去修大學課程,步調相對較快(例如不會講怎麼安裝),但如果能跟上,那對於 git 的掌握度會比單純看入門課程更高。

難度定位

現在假設要在 git 資料夾中建立一筆快照、形成 commit,要怎麼做呢?

我知道!就兩個步驟嘛!

  1. git add
  2. git commit

那如果不要用這兩個指令,要怎麼做出一個 commit 呢?

天啊!這是什麼問題?要生出 commit 卻不用上面兩個指令,天底下有這種事情?

其實是可以的,且看以下步驟:

  1. git hash-object
  2. git update-index --add 
  3. git write-tree
  4. git commit-tree 
  5. git update-ref HEAD

現假設有一個 git 資料夾,已經透過 touch hello_world.txt 建立一個名為 hello_world.txt 的空白文字檔,若透過我們本來會的兩步驟指令建立 commit,流程會長這樣:

https://ithelp.ithome.com.tw/upload/images/20250901/20178513UHgqA5khzt.png

透過 git log 可以看到已經成功建立最新的 commit,雜湊碼為 53663f4...。那如果用剛剛那五個看起來很複雜的指令呢?

https://ithelp.ithome.com.tw/upload/images/20250901/201785139zy2l5d0Yt.png

最後的 git log 一樣發現做出了一個雜湊值為 e446364... 的 commit。

等等,為什麼要把步驟搞這麼複雜?透過這些操作,我們可以發現到在下 git addgit commit 指令時,git 實際上幫我們做的事情(類似寫 C 比寫 Python 更能知道記憶體的配置等操作細節)。

這系列的文章不會難到所有細節都要親自操作,但會觀察在下常用指令時,git 在後面幫我們做的事情,有助於讓我們對 git 有更深一層的了解,如果日後遇到各種狀況,可以有多一層次的思考。

小結

總之,我們會「觀摩」git 在幕後幫我們做的事情,但不至於要「操作」這些繁瑣的程序,就當作參觀 git 工廠,來看看其生產線是怎麼運作的吧!

旅程開始!

參考資料

  1. git-hash-object
  2. git-update-index
  3. git-write-tree
  4. git-commit-tree
  5. git-update-ref

下一篇
Day 2-深入一點點認識 Git:上層的瓷器(Porcelain)與底層的管路(Plumbing)指令
系列文
深入一點點認識 Git6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言